import java.util.Arrays;

//顺序表
public class MyArrList {


    public int[] elem;
    public int usedSize;

    public MyArrList(){
       this.elem = new int[10];
    }

//       打印顺序表
    public void display(){
        for (int i = 0; i < this.usedSize; i++) {
            System.out.print(this.elem[i]+" ");
        }
        System.out.println();
    }
//    获取顺序表有效长度
    public int size(){
        return usedSize;
    }
//    插入元素元素（pos） 在上面pos位置添加date
//    1.pos位置是否合法
//    2.判断数组是否满了 如果满了就扩容 没满添加元素
//    3.挪动数据
//    4.把数据放进去
//    5.usedSize++
    public void add(int pos, int data) {
        if (pos<0 || pos>this.usedSize){
            System.out.println("pos位置不合理");
            return;
        }
        if (isFull(pos)){
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }
        for (int i = this.usedSize-1; i >= pos; i--) {
            this.elem[i+1] = this.elem[i];
        }
        this.elem[pos] = data;
        this.usedSize++;
    }
    public boolean isFull(int pos){
        return this.usedSize == this.elem.length;
    }

//    判断是否包含某个元素
    public boolean contains(int toFind){
        for (int i = 0; i < this.usedSize; i++) {
            if (toFind == this.elem[i]){
                return true;
            }
        }
        return false;
    }

//    查找某个元素对应的位置 找到返回下标 找不到返回-1
    public int search(int toFind){
        for (int i = 0; i < this.usedSize; i++) {
            if (toFind == this.elem[i]){
                return i;
            }
        }
        return -1;
    }
//      获取pos位置元素 越界情况 和 元素为空的情况
    public int getPos(int pos) {
        if (pos<0 || pos>=usedSize) {
            System.out.println("pos位置不合适");
            return -1;//这里返回-1（业务上处理） 不合适 如果数组里找到有-1呢  后期学习异常可以解决
        }
        if (isEmpty()){
            System.out.println("顺序表为空");
            return -1;
        }
        return this.elem[pos];
    }
    public boolean isEmpty(){
        return this.usedSize == 0;
    }



// 给 pos 位置的元素设为(更新) value
    public void setPos(int pos, int value) {
        if (pos<0 || pos>=usedSize) {
            System.out.println("pos位置不合适");
            return;
        }
        if (isEmpty()){
            System.out.println("顺序表为空");
            return;
        }
        this.elem[pos] = value;
    }


//    删除第一次出现的数字
//    1.看一下顺序表是否为空
//    2.查找你要删除的数据toRemove
//    3.elem[i]=elem[i+1]
//    4.i<usedSize-1  usedSize--
    public void remove(int toRemove){
        if (isEmpty()){
            System.out.println("顺序表为空");
            return;
        }
        int index = search(toRemove);
        if (index == -1){
            System.out.println("没有你要的删除的数据");
            return;
        }
        for (int i = index; i < this.usedSize-1; i++) {
            elem[i] = elem[i + 1];
        }
//        this.elem[usedSize] = null;
//        如果数组当中是引用类型数据类型 把最后个多出来的数据置为空
//        因为如果是引用类型数据 那么那块内容会一直在内存中存在 如果这种有引用过多 会是内存占太多没有用的对象
        this.usedSize--;
    }

//     清空顺序表
//    1.如果数组中放的是简单类型 直接usedSize=0
//    2.如果数组中放的是引用类型 我们得先遍历每个数据并将它们执委null
    public void clear(){
//        1.
        this.usedSize = 0;

//        2.
//        for (int i = 0; i < usedSize; i++) {
//            this.elem[i] = null;
//        }
    }








}
